package br.com.quad.dao;

import java.util.List;

import br.com.quad.bean.InformacaoAdicional;
import br.com.quad.dao.HibernateDAOFactory;

public class InformacaoAdicionalDAOHibernate implements InformacaoAdicionalDAO {

	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<InformacaoAdicional> hibernateDAO = null;

	public InformacaoAdicionalDAOHibernate() {
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getInformacaoAdicionalDAO();
	}

	@Override
	public boolean inserir(InformacaoAdicional informacaoAdicional) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.add(informacaoAdicional);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
		return ok;
	}

	@Override
	public boolean alterar(InformacaoAdicional informacaoAdicional) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.update(informacaoAdicional);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@Override
	public boolean excluir(InformacaoAdicional informacaoAdicional) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.remove(informacaoAdicional);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 

		return ok;
	}

	@Override
	public InformacaoAdicional getInformacaoAdicional(int codigoInformacaoAdicional) {
		return hibernateDAO.get(codigoInformacaoAdicional);
	}

	@Override
	public List<InformacaoAdicional> getListarTodos() {
		return hibernateDAO.listAll();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InformacaoAdicional> getSelecionar(String descricao) {
		String 	sql = "FROM InformacaoAdicional WHERE codigoInformacaoAdicional <> 0";

		if (!(descricao.isEmpty())) {
			sql += " AND descricao like '" + descricao + "%' ";  
		}
		
		sql += " ORDER BY descricao";		
 
		List<InformacaoAdicional> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		return lista;
	}

	@Override
	public boolean isExclusaoLiberada(InformacaoAdicional informacaoAdicional) {
		// TODO Auto-generated method stub
		return false;
	}

	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(InformacaoAdicional informacaoAdicional) {
			String 	sql = 	"FROM InformacaoAdicional " +
							"WHERE descricao	= '"+ informacaoAdicional.getDescricao() + "' AND " +
							"codigoInformacaoAdicional != '" + informacaoAdicional.getCodigoInformacaoAdicional() + "'";

			List<InformacaoAdicional> lista = hibernateDAO.getSession().createQuery(sql).list();
		    
			if (lista.size()<1) {
				return false;
			} else {
				return true;
			}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<InformacaoAdicional> getSelecionarTipoVeiculo(int codigoTipoVeiculo) {
		String 	sql = 	"SELECT t.informacoes " +
						" FROM TipoVeiculo as t " +
						" WHERE t.codigoTipoVeiculo = "+codigoTipoVeiculo;	
 
		List<InformacaoAdicional> lista = hibernateDAO.getSession().createQuery(sql).list();

		return lista;
	}
}
